package com.anivia.common.web.satoken.util;

import cn.hutool.core.convert.Convert;
import com.anivia.common.core.constant.TableFieldConstant;
import com.anivia.common.core.enums.PlatformTypeEnum;
import com.anivia.common.web.satoken.admin.StpAdminUtil;
import com.anivia.common.web.satoken.tenant.StpTenantUtil;
import com.anivia.common.web.satoken.user.StpUserUtil;

/**
 * @author wangj
 */
public class UserInfoUtil {
    /**
     * 是否登录
     */
    public static boolean isLogin() {
        return StpUserUtil.isLogin() || StpAdminUtil.isLogin() || StpTenantUtil.isLogin();
    }

    /**
     * 获取当前登录用户id
     */
    public static Integer getLoginUserId() {
        if (StpUserUtil.isLogin()) {
            return Convert.toInt(StpUserUtil.getLoginId());
        }

        if (StpAdminUtil.isLogin()) {
            return Convert.toInt(StpAdminUtil.getLoginId());
        }

        if (StpTenantUtil.isLogin()) {
            return Convert.toInt(StpTenantUtil.getLoginId());
        }
        return null;
    }

    /**
     * 获取当前登录用户类型
     */
    public static PlatformTypeEnum getLoginType() {
        if (StpUserUtil.isLogin()) {
            return PlatformTypeEnum.getByType(StpUserUtil.getLoginType());
        }

        if (StpAdminUtil.isLogin()) {
            return PlatformTypeEnum.getByType(StpAdminUtil.getLoginType());
        }

        if (StpTenantUtil.isLogin()) {
            return PlatformTypeEnum.getByType(StpTenantUtil.getLoginType());
        }
        return null;
    }

    /**
     * 获取当前登录用户租户id
     */
    public static Integer getTenantId() {
        if (StpUserUtil.isLogin()) {
            return Convert.toInt(StpUserUtil.getExtra(TableFieldConstant.TENANT_ID));
        }

        if (StpAdminUtil.isLogin()) {
            return Convert.toInt(StpAdminUtil.getExtra(TableFieldConstant.TENANT_ID));
        }

        if (StpTenantUtil.isLogin()) {
            return Convert.toInt(StpTenantUtil.getExtra(TableFieldConstant.TENANT_ID));
        }
        return null;
    }
}
